//! Good-MITM 主动扫描引擎
//!
//! 基于 Crawlie 爬虫引擎进行主动安全检测，复用被动扫描的核心组件（指纹识别、去重、POC、存储）。
//!
//! ## 功能特性
//!
//! - **主动爬取**: 基于 Crawlie 引擎主动爬取目标站点
//! - **智能去重**: 基于 host+path+fingerprint 的去重机制
//! - **指纹识别**: 自动识别 Web 技术栈和服务指纹
//! - **漏洞扫描**: 支持多种规则引擎（正则、Nuclei、JavaScript）
//! - **并发处理**: 基于 Tokio 的高性能并发处理
//! - **灵活配置**: 支持自定义爬虫深度、并发数、超时等参数
//!
//! ## 使用示例
//!
//! ```rust,no_run
//! use good_mitm_active_scan::{ActiveScanEngine, ActiveScanConfig};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//!     // 加载配置
//!     let config = ActiveScanConfig::default();
//!
//!     // 创建规则匹配器（需要自行实现）
//!     // let matcher = ...;
//!
//!     // 创建扫描引擎
//!     // let mut engine = ActiveScanEngine::new(config, matcher).await?;
//!
//!     // 开始扫描
//!     // let stats = engine.start_scan("https://example.com").await?;
//!
//!     // 获取结果
//!     // let results = engine.get_results().await?;
//!
//!     Ok(())
//! }
//! ```

pub mod config;
pub mod crawler;
pub mod converter;
pub mod engine;
pub mod js_renderer;
pub mod fuzzer;
pub mod db_storage;
pub mod nuclei_parser;

// 重新导出主要类型
pub use config::{ActiveScanConfig, CrawlerConfig, ScanConfig};
pub use crawler::{CrawlerEngine, CrawlerResponse};
pub use converter::ResponseConverter;
pub use engine::{ActiveScanEngine, ScanStats};
pub use js_renderer::{JsRenderer, JsRendererConfig, RenderedPage};
pub use fuzzer::{Fuzzer, FuzzConfig, FuzzRequest, FuzzTarget};
pub use db_storage::{DatabaseConfig, DatabaseStorage};
pub use nuclei_parser::{NucleiTemplate, NucleiTemplateLoader, NucleiMatcher as NucleiRuleMatcher};

// 重新导出被动扫描的核心类型
pub use good_mitm_passive_scan::{
    AlertChannel, AlertManager, DedupManager, EventProcessor, HttpEvent, MatchTarget,
    RegexMatcher, RegexRule, RuleMatcher, ScanResult, Severity, StorageBackend,
};

/// 主动扫描引擎错误类型
#[derive(thiserror::Error, Debug)]
pub enum ActiveScanError {
    #[error("爬虫错误: {0}")]
    CrawlerError(String),

    #[error("转换错误: {0}")]
    ConverterError(String),

    #[error("引擎错误: {0}")]
    EngineError(String),

    #[error("配置错误: {0}")]
    ConfigError(String),

    #[error("IO错误: {0}")]
    IoError(#[from] std::io::Error),

    #[error("被动扫描错误: {0}")]
    PassiveScanError(#[from] good_mitm_passive_scan::ScanError),
}

/// 主动扫描引擎结果类型
pub type ActiveScanResult<T> = Result<T, ActiveScanError>;
